Computers are known to include a central processing unit (CPU), memory, audio processing circuitry, video/graphics-processing circuitry, and peripheral interfaces such that the computer may interface with a keyboard, printer, mouse, etc. The memory may be in a variety of forms, such as a cache memory, hard drive, magnetic tape, floppy disk, random access memory (RAM), read only memory (ROM), compact disk read only memory (CD ROM), etc. Such memory temporarily, or permanently, stores programming instructions, which when read by a CPU cause the CPU to manipulate digital information based upon the programming instructions.
When instructions executed by the CPU require an update of displayed graphical information, rendering commands are issued from the CPU to a rendering engine. Generally, the rendering engine may or may not be a separate device or add-on board dedicated to rendering images on a displayed device. Generally, representations of images to be displayed upon a display device are first written into a frame buffer. The frame buffer will have a memory location associated with each pixel of the display device.
Systems that have a single frame buffer are referred to as being single buffered systems. Numerous problems exist with single buffered systems. For example, tearing of an image can occur through the use of a single buffered system. Tearing occurs when the rendering engine writes new image information into the frame buffer over frame buffer locations that contain data yet to be displayed from the previous image. In other words, during a single screen refresh cycle, portions of data from two frames of data will be displayed. The tearing produces non-contiguous images that are detectable by users.
One method of limiting tearing is to prevent any new data from being rendered into a frame buffer prior to the data within the frame buffered being displayed. However, this can result in choppy video/graphics because the next frame of video may not be available immediately because of the requirement that new data cannot be provided to the frame buffer until after the previous frame of data has been displayed.
Another prior art method used to overcome the disadvantages of single framed systems, is to have the system CPU, which provides the rendering operations to the rendering engine, poll the display device controller to determine which portion of the frame buffer has been rastered. Note the term rastered is used to indicate the portion of data in a frame buffer which has been displayed, or accessed for display, and therefor is no longer needed in the frame buffer. Once the system can be assured that the rendering operation about to be issued by the system contains data to be saved only above the current line of video/graphics being displayed, the rendering operation is dispatched to the rendering engine. However, such polling implementation has significant impact on rendering performance.
One reason the described polling operation impacts performance, is that a rendering operation waiting to be issued by the CPU can represent a primitive having only a small portion of its area below a fine current being rastered. However, in order to assure the primitive will not cause tearing, it is necessary to wait until the display engine indicates all locations of the frame buffer needed to store the primitive image have been rastered. In other words, where a large triangle is to be issued for rendering, and only a small portion of the triangle is below the line currently being rastered, the polling operation described will result in the display engine indicating the frame buffer is not ready. Therefore, the dispatch of the operation will be stalled even though the rendering engine could be doing useful work on most of the triangle.
In order to overcome the problems of single frame buffered systems, dual and triple frame buffered systems have been suggested. While multiple frame buffered systems, resolve most issues with tearing and choppy text, it is still possible for rendering engines to overwrite the current locations of multiple memories, or result in the stalling of CPUs waiting to issue rendering operations.
Therefore, a system capable of overcoming the identified problems of the prior art would be desirable.